﻿using System;
using System.Web.Caching;

namespace Hxsoft.AppV1.Module
{
	/// <summary>
	/// SqlCacheDependency 类。
	/// </summary>
	public static partial class SqlCacheDependency
	{
		private static readonly string _connectionString = Hxsoft.AppV1.Module.Properties.Settings.Default.FC308ConnectionString;

		/// <summary>
		/// 启用数据库的 SqlCacheDependency 更改通知。
		/// </summary>
		public static void EnableNotifications()
		{
			GetManageRight(true);
			SqlCacheDependencyAdmin.EnableNotifications(_connectionString);
		}

		/// <summary>
		/// 禁用数据库的 SqlCacheDependency 更改通知。
		/// </summary>
		public static void DisableNotifications()
		{
			GetManageRight(true);
			SqlCacheDependencyAdmin.DisableNotifications(_connectionString);
		}

		/// <summary>
		/// 连接到 SQL Server 数据库并为 SqlCacheDependency 更改通知准备一个或多个数据库表。
		/// </summary>
		/// <param name="tableName">要启用其更改通知的数据库表。</param>
		public static void EnableTableForNotifications(string tableName)
		{
			GetManageRight(true);
			SqlCacheDependencyAdmin.EnableTableForNotifications(_connectionString, tableName);
		}

		/// <summary>
		/// 禁用 SQL Server 数据库表的 SqlCacheDependency 更改通知。
		/// </summary>
		/// <param name="tableName">要禁用其更改通知的数据库表。</param>
		public static void DisableTableForNotifications(string tableName)
		{
			GetManageRight(true);
			SqlCacheDependencyAdmin.DisableTableForNotifications(_connectionString, tableName);
		}

		/// <summary>
		/// 检索一个字符串数组，该数组包含 SQL Server 数据库中为其启用了更改通知的每个表的名称。
		/// </summary>
		/// <returns>一个字符串数组，包含 SQL Server 数据库表的名称。</returns>
		public static string[] GetTablesEnabledForNotifications()
		{
			return SqlCacheDependencyAdmin.GetTablesEnabledForNotifications(_connectionString);
		}
	}

	/// <summary>
	/// SqlCacheDependency 类对应操作权限部分。
	/// </summary>
	public static partial class SqlCacheDependency
	{
		#region GetManageRight
		/// <summary>
		/// 获取当前用户是否有管理SqlCacheDependency的权限。
		/// </summary>
		/// <param name="dc">数据容器。</param>
		/// <param name="triggerException">当未通过权限验证的时候是否引发异常。</param>
		/// <returns>布尔值表示当前用户是否有管理SqlCacheDependency的权限。</returns>
		public static bool GetManageRight(GenericModuleDataContext dc, bool triggerException)
		{
			string userName = Users.CurrentUserName;
			int permissionCode = (int)PermissionCode.Manage;
			bool b = dc.AccessController.GetUserIsHasPermission<object>(userName, null, ResourceId, permissionCode);

			if (triggerException && !b)
				throw new PermissionException(userName, null, ResourceId, permissionCode, Res.PermissionExceptionMessage);
			return b;
		}

		/// <summary>
		/// 获取当前用户是否有管理SqlCacheDependency的权限。
		/// </summary>
		/// <param name="triggerException">当未通过权限验证的时候是否引发异常。</param>
		/// <returns>布尔值表示当前用户是否有管理SqlCacheDependency的权限。</returns>
		public static bool GetManageRight(bool triggerException)
		{
			return GetManageRight(new GenericModuleDataContext(), triggerException);
		}

		/// <summary>
		/// 获取当前用户是否有管理SqlCacheDependency的权限。
		/// </summary>
		/// <returns>布尔值表示当前用户是否有管理SqlCacheDependency的权限。</returns>
		public static bool GetManageRight()
		{
			return GetManageRight(false);
		}
		#endregion
	}
}